import { camelize, unique } from "../utils/utils";

const csslist = `
"]
[" -webkit-line-clamp "]
[" accent-color "]
[" :active "]
[" additive-symbols (@counter-style) "]
[" ::after (:after) "]
[" align-content "]
[" align-items "]
[" align-self "]
[" align-tracks "]
[" all "]
[" <an-plus-b> "]
[" <angle> "]
[" <angle-percentage> "]
[" animation "]
[" animation-delay "]
[" animation-direction "]
[" animation-duration "]
[" animation-fill-mode "]
[" animation-iteration-count "]
[" animation-name "]
[" animation-play-state "]
[" animation-timing-function "]
[" @annotation "]
[" annotation() "]
[" :any-link "]
[" appearance "]
[" ascent-override (@font-face) "]
[" aspect-ratio "]
[" attr() "]
[" ::backdrop "]
[" backdrop-filter "]
[" backface-visibility "]
[" background "]
[" background-attachment "]
[" background-blend-mode "]
[" background-clip "]
[" background-color "]
[" background-image "]
[" background-origin "]
[" background-position "]
[" background-position-x "]
[" background-position-y "]
[" background-repeat "]
[" background-size "]
[" <basic-shape> "]
[" ::before (:before) "]
[" :blank "]
[" bleed (@page) "]
[" <blend-mode> "]
[" block-overflow "]
[" block-size "]
[" blur() "]
[" border "]
[" border-block "]
[" border-block-color "]
[" border-block-end "]
[" border-block-end-color "]
[" border-block-end-style "]
[" border-block-end-width "]
[" border-block-start "]
[" border-block-start-color "]
[" border-block-start-style "]
[" border-block-start-width "]
[" border-block-style "]
[" border-block-width "]
[" border-bottom "]
[" border-bottom-color "]
[" border-bottom-left-radius "]
[" border-bottom-right-radius "]
[" border-bottom-style "]
[" border-bottom-width "]
[" border-collapse "]
[" border-color "]
[" border-end-end-radius "]
[" border-end-start-radius "]
[" border-image "]
[" border-image-outset "]
[" border-image-repeat "]
[" border-image-slice "]
[" border-image-source "]
[" border-image-width "]
[" border-inline "]
[" border-inline-color "]
[" border-inline-end "]
[" border-inline-end-color "]
[" border-inline-end-style "]
[" border-inline-end-width "]
[" border-inline-start "]
[" border-inline-start-color "]
[" border-inline-start-style "]
[" border-inline-start-width "]
[" border-inline-style "]
[" border-inline-width "]
[" border-left "]
[" border-left-color "]
[" border-left-style "]
[" border-left-width "]
[" border-radius "]
[" border-right "]
[" border-right-color "]
[" border-right-style "]
[" border-right-width "]
[" border-spacing "]
[" border-start-end-radius "]
[" border-start-start-radius "]
[" border-style "]
[" border-top "]
[" border-top-color "]
[" border-top-left-radius "]
[" border-top-right-radius "]
[" border-top-style "]
[" border-top-width "]
[" border-width "]
[" bottom "]
[" @bottom-center "]
[" box-decoration-break "]
[" box-shadow "]
[" box-sizing "]
[" break-after "]
[" break-before "]
[" break-inside "]
[" brightness() "]
[" calc() "]
[" caption-side "]
[" caret-color "]
[" @character-variant "]
[" character-variant() "]
[" @charset "]
[" :checked "]
[" circle() "]
[" clamp() "]
[" clear "]
[" clip "]
[" clip-path "]
[" <color> "]
[" color "]
[" color-adjust "]
[" color-scheme "]
[" column-count "]
[" column-fill "]
[" column-gap "]
[" column-rule "]
[" column-rule-color "]
[" column-rule-style "]
[" column-rule-width "]
[" column-span "]
[" column-width "]
[" columns "]
[" conic-gradient() "]
[" contain "]
[" content "]
[" content-visibility "]
[" contrast() "]
[" <counter> "]
[" counter-increment "]
[" counter-reset "]
[" counter-set "]
[" @counter-style "]
[" counters() "]
[" cross-fade() "]
[" cubic-bezier() "]
[" ::cue "]
[" ::cue-region "]
[" :current "]
[" cursor "]
[" <custom-ident> "]
[" length#ch "]
[" length#cm "]
[" angle#deg "]
[" :default "]
[" :defined "]
[" descent-override (@font-face) "]
[" <dimension> "]
[" :dir "]
[" direction "]
[" :disabled "]
[" display "]
[" <display-box> "]
[" <display-inside> "]
[" <display-internal> "]
[" <display-legacy> "]
[" <display-listitem> "]
[" <display-outside> "]
[" drop-shadow() "]
[" resolution#dpcm "]
[" resolution#dpi "]
[" resolution#dppx "]
[" element() "]
[" ellipse() "]
[" :empty "]
[" empty-cells "]
[" :enabled "]
[" env() "]
[" length#em "]
[" length#ex "]
[" fallback (@counter-style) "]
[" filter "]
[" <filter-function> "]
[" :first "]
[" :first-child "]
[" ::first-letter (:first-letter) "]
[" ::first-line (:first-line) "]
[" :first-of-type "]
[" fit-content() "]
[" <flex> "]
[" flex "]
[" flex-basis "]
[" flex-direction "]
[" flex-flow "]
[" flex-grow "]
[" flex-shrink "]
[" flex-wrap "]
[" flex_value#fr "]
[" float "]
[" :focus "]
[" :focus-visible "]
[" :focus-within "]
[" font "]
[" font-display (@font-face) "]
[" @font-face "]
[" font-family "]
[" font-family (@font-face) "]
[" font-feature-settings "]
[" font-feature-settings (@font-face) "]
[" @font-feature-values "]
[" font-kerning "]
[" font-language-override "]
[" font-optical-sizing "]
[" font-size "]
[" font-size-adjust "]
[" font-stretch "]
[" font-stretch (@font-face) "]
[" font-style "]
[" font-style (@font-face) "]
[" font-synthesis "]
[" font-variant "]
[" font-variant (@font-face) "]
[" font-variant-alternates "]
[" font-variant-caps "]
[" font-variant-east-asian "]
[" font-variant-ligatures "]
[" font-variant-numeric "]
[" font-variant-position "]
[" font-variation-settings "]
[" font-variation-settings (@font-face) "]
[" font-weight "]
[" font-weight (@font-face) "]
[" forced-color-adjust "]
[" format() "]
[" <frequency> "]
[" <frequency-percentage> "]
[" :fullscreen "]
[" :future "]
[" angle#grad "]
[" gap "]
[" <gradient> "]
[" ::grammar-error "]
[" grayscale() "]
[" grid "]
[" grid-area "]
[" grid-auto-columns "]
[" grid-auto-flow "]
[" grid-auto-rows "]
[" grid-column "]
[" grid-column-end "]
[" grid-column-start "]
[" grid-row "]
[" grid-row-end "]
[" grid-row-start "]
[" grid-template "]
[" grid-template-areas "]
[" grid-template-columns "]
[" grid-template-rows "]
[" frequency#Hz "]
[" hanging-punctuation "]
[" :has "]
[" height "]
[" height (@viewport) "]
[" @historical-forms "]
[" :host() "]
[" :host-context() "]
[" :hover "]
[" hsl() "]
[" hsla() "]
[" hue-rotate() "]
[" hwb() "]
[" hyphens "]
[" <ident> "]
[" <image> "]
[" image() "]
[" image-orientation "]
[" image-rendering "]
[" image-resolution "]
[" image-set() "]
[" @import "]
[" :in-range "]
[" :indeterminate "]
[" inherit "]
[" inherits (@property) "]
[" initial "]
[" initial-letter "]
[" initial-letter-align "]
[" initial-value (@property) "]
[" inline-size "]
[" input-security "]
[" inset "]
[" inset() "]
[" inset-block "]
[" inset-block-end "]
[" inset-block-start "]
[" inset-inline "]
[" inset-inline-end "]
[" inset-inline-start "]
[" <integer> "]
[" :invalid "]
[" invert() "]
[" :is "]
[" isolation "]
[" length#in "]
[" justify-content "]
[" justify-items "]
[" justify-self "]
[" justify-tracks "]
[" frequency#kHz "]
[" @keyframes "]
[" :lang "]
[" :last-child "]
[" :last-of-type "]
[" @layer "]
[" layer() "]
[" layer() (@import) "]
[" leader() "]
[" :left "]
[" left "]
[" @left-bottom "]
[" <length> "]
[" <length-percentage> "]
[" letter-spacing "]
[" line-break "]
[" line-clamp "]
[" line-gap-override (@font-face) "]
[" line-height "]
[" line-height-step "]
[" linear-gradient() "]
[" :link "]
[" list-style "]
[" list-style-image "]
[" list-style-position "]
[" list-style-type "]
[" local() "]
[" :local-link "]
[" length#mm "]
[" margin "]
[" margin-block "]
[" margin-block-end "]
[" margin-block-start "]
[" margin-bottom "]
[" margin-inline "]
[" margin-inline-end "]
[" margin-inline-start "]
[" margin-left "]
[" margin-right "]
[" margin-top "]
[" margin-trim "]
[" ::marker "]
[" marks (@page) "]
[" mask "]
[" mask-border "]
[" mask-border-mode "]
[" mask-border-outset "]
[" mask-border-repeat "]
[" mask-border-slice "]
[" mask-border-source "]
[" mask-border-width "]
[" mask-clip "]
[" mask-composite "]
[" mask-image "]
[" mask-mode "]
[" mask-origin "]
[" mask-position "]
[" mask-repeat "]
[" mask-size "]
[" mask-type "]
[" masonry-auto-flow "]
[" math-style "]
[" matrix() "]
[" matrix3d() "]
[" max() "]
[" max-block-size "]
[" max-height "]
[" max-height (@viewport) "]
[" max-inline-size "]
[" max-lines "]
[" max-width "]
[" max-width (@viewport) "]
[" max-zoom (@viewport) "]
[" @media "]
[" min() "]
[" min-block-size "]
[" min-height "]
[" min-height (@viewport) "]
[" min-inline-size "]
[" min-width "]
[" min-width (@viewport) "]
[" min-zoom (@viewport) "]
[" minmax() "]
[" mix-blend-mode "]
[" time#ms "]
[" @namespace "]
[" negative (@counter-style) "]
[" :not "]
[" :nth-child "]
[" :nth-col "]
[" :nth-last-child "]
[" :nth-last-col "]
[" :nth-last-of-type "]
[" :nth-of-type "]
[" <number> "]
[" object-fit "]
[" object-position "]
[" offset "]
[" offset-anchor "]
[" offset-distance "]
[" offset-path "]
[" offset-position "]
[" offset-rotate "]
[" :only-child "]
[" :only-of-type "]
[" opacity "]
[" opacity() "]
[" :optional "]
[" order "]
[" orientation (@viewport) "]
[" @ornaments "]
[" ornaments() "]
[" orphans "]
[" :out-of-range "]
[" outline "]
[" outline-color "]
[" outline-offset "]
[" outline-style "]
[" outline-width "]
[" overflow "]
[" overflow-anchor "]
[" overflow-block "]
[" overflow-clip-margin "]
[" overflow-inline "]
[" overflow-wrap "]
[" overflow-x "]
[" overflow-y "]
[" overscroll-behavior "]
[" overscroll-behavior-block "]
[" overscroll-behavior-inline "]
[" overscroll-behavior-x "]
[" overscroll-behavior-y "]
[" Pseudo-classes "]
[" Pseudo-elements "]
[" length#pc "]
[" length#pt "]
[" length#px "]
[" pad (@counter-style) "]
[" padding "]
[" padding-block "]
[" padding-block-end "]
[" padding-block-start "]
[" padding-bottom "]
[" padding-inline "]
[" padding-inline-end "]
[" padding-inline-start "]
[" padding-left "]
[" padding-right "]
[" padding-top "]
[" @page "]
[" page-break-after "]
[" page-break-before "]
[" page-break-inside "]
[" paint() "]
[" paint-order "]
[" ::part "]
[" :past "]
[" path() "]
[" :paused "]
[" <percentage> "]
[" perspective "]
[" perspective() "]
[" perspective-origin "]
[" :picture-in-picture "]
[" place-content "]
[" place-items "]
[" place-self "]
[" ::placeholder "]
[" :placeholder-shown "]
[" :playing "]
[" pointer-events "]
[" polygon() "]
[" <position> "]
[" position "]
[" prefix (@counter-style) "]
[" @property "]
[" length#Q "]
[" quotes "]
[" angle#rad "]
[" length#rem "]
[" radial-gradient() "]
[" range (@counter-style) "]
[" <ratio> "]
[" :read-only "]
[" :read-write "]
[" rect() "]
[" repeat() "]
[" repeating-linear-gradient() "]
[" repeating-radial-gradient() "]
[" :required "]
[" resize "]
[" <resolution> "]
[" revert "]
[" rgb() "]
[" rgba() "]
[" :right "]
[" right "]
[" @right-bottom "]
[" :root "]
[" rotate "]
[" rotate() "]
[" rotate3d() "]
[" rotateX() "]
[" rotateY() "]
[" rotateZ() "]
[" row-gap "]
[" ruby-align "]
[" ruby-merge "]
[" ruby-position "]
[" saturate() "]
[" scale "]
[" scale() "]
[" scale3d() "]
[" scaleX() "]
[" scaleY() "]
[" scaleZ() "]
[" :scope "]
[" scroll-behavior "]
[" scroll-margin "]
[" scroll-margin-block "]
[" scroll-margin-block-end "]
[" scroll-margin-block-start "]
[" scroll-margin-bottom "]
[" scroll-margin-inline "]
[" scroll-margin-inline-end "]
[" scroll-margin-inline-start "]
[" scroll-margin-left "]
[" scroll-margin-right "]
[" scroll-margin-top "]
[" scroll-padding "]
[" scroll-padding-block "]
[" scroll-padding-block-end "]
[" scroll-padding-block-start "]
[" scroll-padding-bottom "]
[" scroll-padding-inline "]
[" scroll-padding-inline-end "]
[" scroll-padding-inline-start "]
[" scroll-padding-left "]
[" scroll-padding-right "]
[" scroll-padding-top "]
[" scroll-snap-align "]
[" scroll-snap-stop "]
[" scroll-snap-type "]
[" @scroll-timeline "]
[" scrollbar-color "]
[" scrollbar-gutter "]
[" scrollbar-width "]
[" ::selection "]
[" selector() "]
[" sepia() "]
[" <shape> "]
[" shape-image-threshold "]
[" shape-margin "]
[" shape-outside "]
[" size (@page) "]
[" size-adjust (@font-face) "]
[" skew() "]
[" skewX() "]
[" skewY() "]
[" ::slotted "]
[" speak-as (@counter-style) "]
[" ::spelling-error "]
[" src (@font-face) "]
[" steps() "]
[" <string> "]
[" @styleset "]
[" styleset() "]
[" @stylistic "]
[" stylistic() "]
[" suffix (@counter-style) "]
[" @supports "]
[" supports() (@import) "]
[" @swash "]
[" swash() "]
[" symbols (@counter-style) "]
[" symbols() "]
[" syntax (@property) "]
[" system (@counter-style) "]
[" time#s "]
[" angle#turn "]
[" tab-size "]
[" table-layout "]
[" :target "]
[" target-counter() "]
[" target-counters() "]
[" ::target-text "]
[" target-text() "]
[" :target-within "]
[" text-align "]
[" text-align-last "]
[" text-combine-upright "]
[" text-decoration "]
[" text-decoration-color "]
[" text-decoration-line "]
[" text-decoration-skip "]
[" text-decoration-skip-ink "]
[" text-decoration-style "]
[" text-decoration-thickness "]
[" text-emphasis "]
[" text-emphasis-color "]
[" text-emphasis-position "]
[" text-emphasis-style "]
[" text-indent "]
[" text-justify "]
[" text-orientation "]
[" text-overflow "]
[" text-rendering "]
[" text-shadow "]
[" text-size-adjust "]
[" text-transform "]
[" text-underline-offset "]
[" text-underline-position "]
[" <time> "]
[" <time-percentage> "]
[" <timing-function> "]
[" top "]
[" @top-center "]
[" touch-action "]
[" transform "]
[" transform-box "]
[" <transform-function> "]
[" transform-origin "]
[" transform-style "]
[" transition "]
[" transition-delay "]
[" transition-duration "]
[" transition-property "]
[" transition-timing-function "]
[" translate "]
[" translate() "]
[" translate3d() "]
[" translateX() "]
[" translateY() "]
[" translateZ() "]
[" type() "]
[" unicode-bidi "]
[" unicode-range (@font-face) "]
[" unset "]
[" <url> "]
[" url() "]
[" :user-invalid "]
[" user-select "]
[" :user-valid "]
[" user-zoom (@viewport) "]
[" length#vh "]
[" length#vmax "]
[" length#vmin "]
[" length#vw "]
[" :valid "]
[" var() "]
[" vertical-align "]
[" @viewport "]
[" viewport-fit (@viewport) "]
[" visibility "]
[" :visited "]
[" :where "]
[" white-space "]
[" widows "]
[" width "]
[" width (@viewport) "]
[" will-change "]
[" word-break "]
[" word-spacing "]
[" word-wrap "]
[" writing-mode "]
[" resolution#x "]
[" z-index "]
[" zoom (@viewport) "]
["
`;

function baseParsersGener() {
  let cssApiListArray = csslist.split(`"]
["`);
  console.log(cssApiListArray.length);
  //1.替换无用的备注信息
  cssApiListArray = cssApiListArray.map((item) => {
    item = item.trim();
    item = item.replace(/\(@.+\)/, "");
    item = item.trim();
    return item;
  });
  //2.将不需要的内容先删除， 比如css中有一些函数，我们现在要css属性，暂时不需要
  cssApiListArray = cssApiListArray.filter((item) => {
    return (
      item.length > 0 &&
      item.search(/\(\)|^\<.*\>$|^\:\:?.*|^\@.*|.*\#.*/) === -1
    );
  });

  //3.将横线命名法改为驼峰命名
  cssApiListArray = cssApiListArray.map((item) => {
    item = camelize(item);
    return item;
  });

  //去重
  cssApiListArray = unique(cssApiListArray);

  //4. 生成接口的函数
  let interfaceStr = "";

  //导入包
  interfaceStr += `import { DefineParsers, DefineWTSC, implReturn } from "../core";\n`;

  //类型信息
  interfaceStr += `type BaseWTSC = DefineWTSC<DefineBaseParsers<BaseWTSC>>;\n`;

  //接口前缀
  interfaceStr += ` export interface  DefineBaseParsers<R extends implReturn | BaseWTSC>
    extends DefineParsers<R> {\n`;

  //遍历生成api
  for (const item of cssApiListArray) {
    interfaceStr = interfaceStr + "  " + item + `(value:string):R` + ";\n";
  }

  //接口后缀
  interfaceStr += "}\n";

  let implStr = "";
  //导入包
  implStr += `import { Parsers, DefineWTSC, implReturn } from "../core";\n`;
  implStr += `import { DefineBaseParsers } from "../DefinBaseParsers";\n`;
  //类前缀

  implStr += ` export class BaseParsersImpl extends Parsers
  implements DefineBaseParsers<implReturn> {\n`;

  //编历生成
  for (const item of cssApiListArray) {
    implStr += `  ${item}(value:string):string{return value;}\n`;
  }
  //类后缀
  implStr += "}";
  console.log(interfaceStr);

  // console.log(implStr);
}

baseParsersGener();
